home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Eagles Nest BBS 8
/
Eagles_Nest_Mac_Collection_Disc_8.TOAST
/
Developer Tools⁄Additions
/
InsideBa1994
/
InsideBasic-94
/
IB 94
/
RandomAccessDemo
/
FB Random Access Demo.BAS
Wrap
BASIC Source File
|
1993-05-13
|
5KB
|
210 lines
' ---------------------------
' Random Access Record Demo
' ---------------------------
DIM 31 gDbFile$
DIM gRecNum,gTotalRecords
DIM 41 gFirstName$ ' len byte + 41 data bytes = 42
DIM 41 gLastName$ ' + 42 = 84
DIM 41 gAddress1$ ' + 42 = 126
DIM 41 gAddress2$ ' + 42 = 168
DIM 41 gCity$ ' + 42 = 210
DIM 2 gState$ ' 2+len byte + even pad =+4=214
DIM 5 gZip$ ' +6 = 220 total record size
_recSz = 220
END GLOBALS
LOCAL FN displayRecord
t$ = "Record #: " + STR$(gRecNum) + " of " + STR$(gTotalRecords)
PRINT%(296,20);t$
END FN
LOCAL FN drawWnd
TEXT 0,12,0,0
t$ = "File: " + gDbFile$
PRINT%(8,20);t$
T = 26:L =-7:B = 26:R = 477
PEN 2,3,1,8,3
CALL MOVETO(L,T):CALL LINETO(R,B)
t$ = "First Name: "
PRINT%(45,58);t$
t$ = "Last Name:"
PRINT%(47,86);t$
t$ = "Address Line 1:"
PRINT%(21,111);t$
t$ = "Address Line 2:"
PRINT%(22,138);t$
t$ = "City:"
PRINT%(90,164);t$
t$ = "State:"
PRINT%(82,192);t$
t$ = "Zip:"
PRINT%(184,193);t$
t$ = "Telephone:"
PRINT%(50,219);t$
FN displayRecord
END FN
LOCAL FN setButtons
LONG IF gRecNum < gTotalRecords
BUTTON 2,_enable ' activate next
XELSE
BUTTON 2,_disable
END IF
LONG IF gRecNum > 1 ' activate previous
BUTTON 3,_enable
XELSE
BUTTON 3,_disable
END IF
FN displayRecord
EDIT FIELD 1 ' start at first field
SETSELECT 0,&FF
END FN
LOCAL FN saveRecord
LONG IF gRecNum = 0 ' first save
gDbFile$ = FILES$(_fSave,p$,gDbFile$,gSaveVol)
LONG IF LEN(gDbFile$)
gRecNum = 1 ' set to 1st record
ON ERROR GOSUB 65535 ' disable FB's error handling
DEF OPEN "TEXTdbMO"
OPEN "N",1,gDbFile$,_recSz,gSaveVol' open for reading & writing
LONG IF NOT ERROR ' file exists
CLOSE #1
KILL gDbFile$,gSaveVol
OPEN "N",1,gDbFile$,_recSz,gSaveVol
END IF
RECORD #1,0
PRINT #1,"First Name" ' store field titles in rec zero
PRINT #1,"Last Name"
PRINT #1,"Address Line 1"
PRINT #1,"Address Line 2"
PRINT #1,"City"
PRINT #1,"State"
PRINT #1,"Zip"
XELSE
ERROR = 1 ' don't save
END IF
END IF
LONG IF NOT ERROR
gRecNum = gTotalRecords+1 ' append new records
RECORD #1,gRecNum
FOR fld = 1 TO 7
t$ = EDIT$(fld)
PRINT #1,t$
NEXT
' ---
' OR:
' gFirstName$ = EDIT$(1)
' gLastName$ = EDIT$(2)
' gAddress1$ = EDIT$(3)
' gAddress2$ = EDIT$(4)
' gCity$ = EDIT$(5)
' gState$ = EDIT$(6)
' gZip$ = EDIT$(7)
' PRINT #1, gFirstName$
' PRINT #1, gLastName$
' PRINT #1, gAddress1$
' PRINT #1, gAddress2$
' PRINT #1, gCity$
' PRINT #1, gState$
' PRINT #1, gZip$
' ---
gTotalRecords = LOF(1)-1 ' LOF(n) returns # of records
FN setButtons
XELSE
ERROR=0
BEEP ' sleazy error handling
END IF
END FN
LOCAL FN getRecord
RECORD #1,gRecNum
FOR fld = 1 TO 7
LINE INPUT #1,t$
EDIT$(fld) = t$
NEXT
FN setButtons
END FN
LOCAL FN doDialog
evnt = DIALOG (0) 'get the actual event
id = DIALOG (evnt) 'id of the event (not used in this program)
SELECT evnt 'what event occurred?
CASE _wndRefresh: FN drawWnd 'update window background
CASE _Eftab,_efReturn,_efShifttab
fld = WINDOW(_efNum)
LONG IF evnt = _efShifttab
DEC(fld)
XELSE
INC(fld)
END IF
IF fld>8 THEN fld = 1
IF fld<1 THEN fld = 8
EDIT FIELD fld
SETSELECT 0,&FF ' select all text
CASE _btnClick
SELECT id
CASE 1 ' add button
FN saveRecord
CASE 2 ' next button
INC(gRecNum)
IF gRecNum > gTotalRecords THEN gRecNum = 1' wrap
FN getRecord
CASE 3 ' previous button
DEC(gRecNum)
IF gRecNum < 1 THEN gRecNum = gTotalRecords' wrap
FN getRecord
END SELECT
END SELECT
END FN
LOCAL FN doMenu ' only menu item is quit
WINDOW CLOSE 1
CLOSE #1
END
END FN
LOCAL FN initialize
gTotalRecords = 0
gRecNum = 0
gDbFile$ = "Untitled"
MENU 1,0,1,"File"
MENU 1,1,1,"Quit/Q"
WINDOW 1,"Data Entry Form",(20,50)-(492,300),280
TEXT 0,12,0,0
EDIT FIELD 2,"",( 128, 72)-( 357, 88),1,1
EDIT FIELD 3,"",( 128, 99)-( 357, 115),1,1
EDIT FIELD 4,"",( 128, 126)-( 357, 142),1,1
EDIT FIELD 5,"",( 128, 153)-( 357, 169),1,1
EDIT FIELD 6,"",( 128, 180)-( 165, 196),1,1
EDIT FIELD 7,"",( 216, 181)-( 310, 197),1,1
EDIT FIELD 8,"",( 128, 207)-( 279, 223),1,1
EDIT FIELD 1,"",( 128, 45)-( 357, 61),1,1
BUTTON 1, 1,"Add",(387, 70)-( 458, 90),1
BUTTON 2, 0,"Next",(387, 108)-( 458, 128),1
BUTTON 3, 0,"Previous",(387, 140)-( 458, 160),1
END FN
' ------------ start of main program
FN initialize
ON DIALOG FN doDialog
ON MENU FN doMenu
DO
HANDLEEVENTS
UNTIL theCowsComeHome